package com.zhentao.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.servers.Server;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;

/**
 * Swagger API文档配置
 * 
 * @author zhentao
 * @date 2024-12-19
 */
@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("🚀 海关AI参数引擎系统 API")
                        .description("""
                                # 海关AI参数引擎系统
                                
                                ## 系统简介
                                
                                海关AI参数引擎是一个企业级的参数配置管理系统，提供统一的参数管理、智能推荐、变更审计、版本控制等功能。
                                
                                ## 核心特性
                                
                                - ✅ **多环境配置** - 支持开发、测试、生产等多环境参数管理
                                - ✅ **智能推荐** - AI驱动的参数优化建议
                                - ✅ **变更审计** - 完整的变更历史记录和回滚功能
                                - ✅ **规则引擎** - 灵活的参数校验和处理规则
                                - ✅ **分类管理** - 层级化的参数分类组织
                                - ✅ **实时监控** - 参数使用情况统计和分析
                                - ✅ **版本控制** - 参数配置的版本管理
                                - ✅ **API优先** - 完整的REST API支持
                                
                                ## 快速开始
                                
                                ### 1. 参数定义管理
                                ```bash
                                # 创建参数
                                POST /api/param-engine/definition
                                
                                # 查询参数列表
                                GET /api/param-engine/definition/page
                                ```
                                
                                ### 2. 规则引擎
                                ```bash
                                # 执行规则
                                POST /api/param-engine/rule/execute
                                
                                # 校验规则语法
                                POST /api/param-engine/rule/validate
                                ```
                                
                                ### 3. AI推荐
                                ```bash
                                # 获取推荐列表
                                GET /api/param-engine/recommendation/page
                                
                                # 应用推荐
                                POST /api/param-engine/recommendation/apply/{id}
                                ```
                                """)
                        .version("1.0.0")
                        .contact(new Contact()
                                .name("zhentao")
                                .email("zhentao@example.com")
                                .url("https://github.com/your-org/customs-param-engine"))
                        .license(new License()
                                .name("Apache 2.0")
                                .url("https://www.apache.org/licenses/LICENSE-2.0")))
                .servers(List.of(
                        new Server().url("http://localhost:8001").description("本地开发环境"),
                        new Server().url("http://test.example.com:8001").description("测试环境"),
                        new Server().url("https://prod.example.com:8001").description("生产环境")
                ));
    }

    @Bean
    public GroupedOpenApi paramDefinitionApi() {
        return GroupedOpenApi.builder()
                .group("参数定义管理")
                .pathsToMatch("/api/param-engine/definition/**")
                .build();
    }

    @Bean
    public GroupedOpenApi paramValueApi() {
        return GroupedOpenApi.builder()
                .group("参数值管理")
                .pathsToMatch("/api/param-engine/value/**")
                .build();
    }

    @Bean
    public GroupedOpenApi paramCategoryApi() {
        return GroupedOpenApi.builder()
                .group("参数分类管理")
                .pathsToMatch("/api/param-engine/category/**")
                .build();
    }

    @Bean
    public GroupedOpenApi paramRuleApi() {
        return GroupedOpenApi.builder()
                .group("规则引擎")
                .pathsToMatch("/api/param-engine/rule/**")
                .build();
    }

    @Bean
    public GroupedOpenApi paramRecommendationApi() {
        return GroupedOpenApi.builder()
                .group("AI推荐")
                .pathsToMatch("/api/param-engine/recommendation/**")
                .build();
    }

    @Bean
    public GroupedOpenApi paramChangeLogApi() {
        return GroupedOpenApi.builder()
                .group("变更日志")
                .pathsToMatch("/api/param-engine/change-log/**")
                .build();
    }

    @Bean
    public GroupedOpenApi systemApi() {
        return GroupedOpenApi.builder()
                .group("系统管理")
                .pathsToMatch("/api/param-engine/system/**", "/actuator/**")
                .build();
    }
}
